package com.smart.community.property.service;

import com.smart.community.commons.result.PageResult;
import com.smart.community.property.dto.AddEmployeeDTO;
import com.smart.community.property.dto.UpdateEmployeeDTO;
import com.smart.community.property.dto.EmployeeQueryDTO;
import com.smart.community.property.vo.EmployeeVO;
import com.smart.community.property.vo.UserVO;

import java.util.List;

/**
 * 物业公司员工管理服务接口
 * 
 * @author Wu.Liang
 * @since 2025-01-21
 */
public interface IPropertyEmployeeService {
    
    /**
     * 获取物业公司员工列表
     * 
     * @param propertyCompanyId 物业公司ID
     * @param queryDTO 查询条件
     * @return 员工列表
     * @throws Exception 统一异常
     */
    PageResult<EmployeeVO> getPropertyCompanyEmployees(Long propertyCompanyId, EmployeeQueryDTO queryDTO) throws Exception;
    
    /**
     * 添加员工到物业公司
     * 
     * @param propertyCompanyId 物业公司ID
     * @param addEmployeeDTO 员工信息
     * @return 是否成功
     * @throws Exception 统一异常
     */
    boolean addEmployeeToPropertyCompany(Long propertyCompanyId, AddEmployeeDTO addEmployeeDTO) throws Exception;
    
    /**
     * 更新员工信息
     * 
     * @param propertyCompanyId 物业公司ID
     * @param employeeId 员工关联ID
     * @param updateEmployeeDTO 更新信息
     * @return 是否成功
     * @throws Exception 统一异常
     */
    boolean updateEmployeeInfo(Long propertyCompanyId, Long employeeId, UpdateEmployeeDTO updateEmployeeDTO) throws Exception;
    
    /**
     * 移除员工
     * 
     * @param propertyCompanyId 物业公司ID
     * @param employeeId 员工关联ID
     * @return 是否成功
     * @throws Exception 统一异常
     */
    boolean removeEmployeeFromPropertyCompany(Long propertyCompanyId, Long employeeId) throws Exception;
    
    /**
     * 搜索可分配的用户
     * 
     * @param keyword 搜索关键词
     * @param excludePropertyCompanyId 排除的物业公司ID
     * @return 用户列表
     * @throws Exception 统一异常
     */
    List<UserVO> searchAvailableUsers(String keyword, Long excludePropertyCompanyId) throws Exception;
    
    /**
     * 批量添加员工
     * 
     * @param propertyCompanyId 物业公司ID
     * @param addEmployeeDTOList 员工信息列表
     * @return 是否成功
     * @throws Exception 统一异常
     */
    boolean batchAddEmployees(Long propertyCompanyId, List<AddEmployeeDTO> addEmployeeDTOList) throws Exception;
    
    /**
     * 获取员工详情
     * 
     * @param propertyCompanyId 物业公司ID
     * @param employeeId 员工关联ID
     * @return 员工详情
     * @throws Exception 统一异常
     */
    EmployeeVO getEmployeeDetail(Long propertyCompanyId, Long employeeId) throws Exception;
    
    /**
     * 检查用户是否属于指定物业公司
     * 
     * @param userId 用户ID
     * @param propertyCompanyId 物业公司ID
     * @return 是否属于
     * @throws Exception 统一异常
     */
    boolean isUserBelongToPropertyCompany(Long userId, Long propertyCompanyId) throws Exception;
} 